package com.ruoyi.economize.service.impl;

import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.department.domain.Department;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.economize.mapper.EconomizeMapper;
import com.ruoyi.economize.domain.Economize;
import com.ruoyi.economize.service.IEconomizeService;
import org.springframework.web.multipart.MultipartFile;

/**
 * 【请填写功能名称】Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-07-09
 */
@Service
public class EconomizeServiceImpl implements IEconomizeService 
{
    @Autowired
    private EconomizeMapper economizeMapper;

    /**
     * 查询【请填写功能名称】
     * 
     * @param id 【请填写功能名称】主键
     * @return 【请填写功能名称】
     */
    @Override
    public Economize selectEconomizeById(Long id)
    {
        return economizeMapper.selectEconomizeById(id);
    }

    /**
     * 查询【请填写功能名称】列表
     * 
     * @param economize 【请填写功能名称】
     * @return 【请填写功能名称】
     */
    @Override
    public List<Economize> selectEconomizeList(Economize economize)
    {
        return economizeMapper.selectEconomizeList(economize);
    }

    /**
     * 新增【请填写功能名称】
     * 
     * @param economize 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int insertEconomize(Economize economize)
    {
        return economizeMapper.insertEconomize(economize);
    }

    /**
     * 修改【请填写功能名称】
     * 
     * @param economize 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int updateEconomize(Economize economize)
    {
        return economizeMapper.updateEconomize(economize);
    }

    /**
     * 批量删除【请填写功能名称】
     * 
     * @param ids 需要删除的【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteEconomizeByIds(Long[] ids)
    {
        return economizeMapper.deleteEconomizeByIds(ids);
    }

    /**
     * 删除【请填写功能名称】信息
     * 
     * @param id 【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteEconomizeById(Long id)
    {
        return economizeMapper.deleteEconomizeById(id);
    }

    @Override
    public AjaxResult addFile(MultipartFile file) throws IOException {
        ExcelUtil<Economize> util = new ExcelUtil<>(Economize.class);
        List<Economize> economizeList = util.importExcel(file.getInputStream());

        // 先对 diseaseList 中的 illnessName 和 departmentName 去前后空格
        economizeList.forEach(economize -> {
            if (economize.getEconomizeName() != null) {
                economize.setEconomizeName(economize.getEconomizeName().trim());
            }
        });
        // ✅ 1. Excel 内部去重（根据 economizeName 保留第一条）
        Map<String, Economize> uniqueExcelMap = economizeList.stream()
                .filter(e -> StringUtils.isNotBlank(e.getEconomizeName()))
                .collect(Collectors.toMap(
                        Economize::getEconomizeName,
                        e -> e,
                        (existing, replacement) -> existing
                ));
        List<Economize> uniqueExcelList = new ArrayList<>(uniqueExcelMap.values());

        // ✅ 2. 查询数据库已有的经济区列表
        List<Economize> existingEconomizes = economizeMapper.selectEconomizeList(new Economize());

        // ✅ 3. 提取已有经济区名
        Set<String> existingNames = existingEconomizes.stream()
                .map(Economize::getEconomizeName)
                .filter(StringUtils::isNotBlank)
                .collect(Collectors.toSet());

        // ✅ 4. 过滤掉数据库中已存在的
        List<Economize> newEconomizes = uniqueExcelList.stream()
                .filter(e -> !existingNames.contains(e.getEconomizeName()))
                .collect(Collectors.toList());

        // ✅ 5. 插入数据
        int successCount = 0;
        for (Economize e : newEconomizes) {
            economizeMapper.insertEconomize(e);
            successCount++;
        }

        return AjaxResult.success("导入成功，共导入 " + successCount + " 条新经济区数据");
    }

}
